package com.gzy.rpsm_property.constant;

import com.gzy.rpsm_property.mapper.FreightBasisMapper;

import com.gzy.rpsm_property.pojo.FreightBasis;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AccessLevel;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.util.List;

/**
 * 费率基础数据类，用于存储和管理水费、电费和物业费的信息。
 */
@Data
@Component
@Scope("singleton")
@ApiModel
public class FreightBasisData {
    /**
     * 数据库映射器，用于访问费率数据。
     * 该信息不需要显示在API文档中。
     */
    @ApiModelProperty(hidden = true)
    @Setter(AccessLevel.NONE)
    @Getter(AccessLevel.NONE)
    private FreightBasisMapper freightBasisMapper;
    /**
     * 水费信息。
     */
    @ApiModelProperty("水费信息")
    private FreightBasis water;
    /**
     * 电费信息。
     */
    @ApiModelProperty("电费信息")
    private FreightBasis electricity;
    /**
     * 物业费信息。
     */
    @ApiModelProperty("物业费信息")
    private FreightBasis property;
    /**
     * 构造函数，初始化费率基础数据。
     *
     * @param freightBasisMapper 数据库映射器
     */
    public FreightBasisData(FreightBasisMapper freightBasisMapper) {
        this.freightBasisMapper = freightBasisMapper;
        flushData();  // 初始化时刷新数据
    }
    /**
     * 刷新费率数据，从数据库中获取最新的费率信息并更新到当前对象中。
     */
    public void flushData() {
        List<FreightBasis> list = freightBasisMapper.findAll();  // 从数据库中获取所有费率信息
        synchronized (this) {  // 同步块，确保线程安全
            this.water = list.get(0);  // 更新水费信息
            this.electricity = list.get(1);  // 更新电费信息
            this.property = list.get(2);  // 更新物业费信息
        }
    }
}



